package cn.com.pansky.action.myaccount;

import java.io.File;

import net.vsame.url2sql.action.CommonAction;
import net.vsame.url2sql.helper.SqlHelper;
import net.vsame.url2sql.sql.Model;
import cn.com.pansky.action.imgContrast.ImgContrast;
import cn.com.pansky.action.logs.Log;
import cn.com.pansky.service.CommonService;
import cn.com.pansky.util.LssConstant;

import com.alibaba.fastjson.JSONObject;

/**
 * 实名认证
 * 
 * @author Administrator
 *
 */
public class CertificationAction extends CommonAction {
	
	private Log log = new Log();
	CommonService cs = new CommonService();
	

	/**
	 * 实名认证
	 * @throws Exception
	 */
	public void new_realName() throws Exception {

		String AA032 = user.getString("AA032");
		String findCA001 = urlConfig.getVar("findCA001");
		Model m = SqlHelper.queryOne(findCA001, AA032);
		String CA001 = m.getString("CA001");
		
		//日志记录start
		String AF001 = log.start(CA001, "SM");
		
		String findInfo = urlConfig.getVar("findInfo");
		Model mm = SqlHelper.queryOne(findInfo, CA001);
		
		if (null == mm.getString("CA003") || "".equals(mm.getString("CA003"))) {
			context.getDatas().put("isPass", false);
			context.getDatas().put("info", "请先使用姓名修改功能修改为正确姓名。");
			return;
		}
		
		String imgPath = getParam("img"); // 身份证图片
		String imgPath2 = getParam("img2"); // 刷脸图片
		File file = new File(imgPath);// 身份证上传后的临时文件
		File file2 = new File(imgPath2);// 刷脸上传后的临时文件
		JSONObject json = new JSONObject();
		if (!file.exists() || !file2.exists()) {
			json.put("isPass", false); // 认证失败
			json.put("info", "身份证或刷脸照片不可为空"); // 认证失败
		} else {
			//比对身份证和刷脸照片
			double num = ImgContrast.imgContrast(imgPath, imgPath2);
			// 判断照片相似度
			if (num > LssConstant.CONFIDENCE) {
				
				// 判断库中是否有这个人的特征信息：
				String findFeatures = urlConfig.getVar("findFeatures");
				Model mmm = SqlHelper.queryOne(findFeatures, CA001);
				String id = "";
				if (mmm != null) {
					id = mmm.getString("CA011");
				}
				cs.isnertRC06(imgPath2, CA001, num, id);
				file2.delete();
			} else {
				json.put("isPass", false);
				json.put("info", "请确认身份证与刷脸是同一人！");
				context.getDatas().put("result", json);
				file.delete();
				file2.delete();
				//日志记录end
				boolean result = log.end(AF001, json.getString("isPass"), json.getString("info"));
				System.out.println("实名认证记录"+result);
				return;
			}
			
			json = cs.idendetify(file.getPath());

			if (mm.getString("CA003").equals(json.getString("CA003"))
					&& mm.getString("CA006").equals(json.getString("CA006"))) {
				// 认证成功
				// 如果认证成功，则将民族，性别，出生年月，图片更新至用户信息中
				String sql = urlConfig.getVar("mergeUserByCardId");
				SqlHelper.execute(sql, json.getString("CA009"),
						cs.getValueByName("AAC005", json.getString("CA051")),
						cs.getAac004(json.getString("CA050")),
						json.getString("CA052"), CA001);

				// 根据服务对象id查询是否有身份证文件
				String s1 = urlConfig.getVar("queryRC05Byca001");
				Model m2 = SqlHelper.queryOne(s1, CA001);
				String id = "";
				if (m2 != null) {
					id = m2.getString("CA020");
				}
				// 说明该用户不存在身份证文件，新增该条信息
				cs.isnertRC05(CA001, imgPath, id);
				file.delete(); // 删除身份证图片临时文件
				String updRC10ByAA032 = urlConfig.getVar("updRC10ByAA032");
				String aa032 = user.getString("AA032");
				SqlHelper.execute(updRC10ByAA032, aa032);
				json.put("isPass", true);
				json.put("info", "恭喜您实名认证成功");
				json.put("AA111", 1);
			} else {
				json.put("isPass", false); // 认证失败
				json.put("info", "身份证姓名与注册时填写信息不一致！"); // 认证失败
			}
		}
		System.out.println(json);
		//日志记录end
		boolean result = log.end(AF001, json.getString("isPass"), json.getString("info"));
		System.out.println("日志：实名认证"+result);

		context.getDatas().put("result", json);
	}
}